#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;


int filas=10;
int columnas=10;
int  matriz[10][10];


//1 celda viva, 0 celda muerta
void initialize(){

 srand((unsigned)time(0));
 for(int i = 0;i < 10; i++){
    for(int j = 0;j < 10; j++){
        matriz[i][j]=rand()%2;
    }
 }


} // inicializa las celdas
void print(){

 for(int i = 0;i < 10; i++){
    for(int j = 0;j < 10; j++){
        cout<<matriz[i][j]<<" ";
    }

    cout<<endl;
 }

} // imprime el tablero
int count_neighbors(int x, int y){

    int vecinos = 0;
	if (x > 0 && y > 0 && matriz[x-1][y-1] == 1){
		vecinos += 1;
    }
	if (y > 0 && matriz[x][y-1] == 1){
		vecinos += 1;
	}
	if (x < filas-1 && y > 0 && matriz[x+1][y-1] == 1){
		vecinos += 1;
	}
	if (x > 0 && matriz[x-1][y] == 1){
		vecinos += 1;
	}
	if (x < filas-1 && matriz[x+1][y] == 1){
		vecinos += 1;
	}
	if (x > 0 &&  y < columnas-1 && matriz[x-1][y+1] == 1){
		vecinos += 1;
	}
	if (y < columnas-1 && matriz[x][y+1] == 1){
		vecinos += 1;
	}
	if (x < filas-1 && y < columnas-1 && matriz[x+1][y+1] == 1){
		vecinos += 1;
	}
	return vecinos;


} //

void iterate(){

    int nueva[10][10];
    int vecinos=0;

    for(int x=0; x<filas; x++)
    {
          for(int y=0; y<columnas; y++)
          {
              vecinos = count_neighbors(x, y);
              if (matriz[x][y] == 1){
                if (vecinos < 2 || vecinos > 3){
					nueva[x][y] = 0;
					}
              }

              if (matriz[x][y] == 0){
                if (vecinos == 3){
					nueva[x][y] = 1;
					}
              }

          }
    }


} //simula un el siguiente estado.

void simulate_life(int count) {
    for(int i=0; i<count; i++) {
        print();
        cout<<endl<<endl;
        iterate();
    }
}


int main()
{
   initialize();
   simulate_life(7);

    return 0;
}
